package com.sigetdriver;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.json.JSONObject;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver.PendingResult;
import android.content.Context;
import android.content.Intent;
import android.sax.StartElementListener;
import android.util.Log;
import android.widget.Toast;

import com.google.android.gcm.GCMBaseIntentService;
import com.sigetdriver.controller.NotificacionesController;
import com.sigetdriver.controller.ServicioController;
import com.sigetdriver.entities.NotificacionesBean;
import com.sigetdriver.entities.ServicioBean;
import com.sigetdriver.util.Util_TimeAndDate;
import com.sigetdriver.view.activity.EstadoActivity;
import com.sigetdriver.view.activity.MensajeActivity;
import com.sigetdriver.view.activity.VoucherActivity;

public class GCMIntentService extends GCMBaseIntentService {
	
	private static final String TAG = GCMIntentService.class.getSimpleName();


    public GCMIntentService() {
    	Log.e(TAG, "Received message");
    }

	@Override
	protected void onError(Context arg0, String arg1) {
		
	}

	
    @Override
    protected void onMessage(Context context, Intent intent) {
 
    	JSONObject mensaje;
        
        try {
        	
            Log.i(TAG, "Received message");
            String message = intent.getExtras().getString("mensaje"); 
            System.out.println("MENSAJE:\n"+message);
            Log.e(TAG,message);
        	
            mensaje = new JSONObject(message);
        	String estado = mensaje.getString("estado");
        	
        	
        	switch(Integer.parseInt(estado)){
        	
        	case 0:
        		String numReserva1 = mensaje.getString("numReserva");
        		ServicioBean.tableHelper.deleteEntity(ServicioBean.ID_SERVICIO_COLUMN_NAME + "=?", new String[] { numReserva1 } );
        		Intent in1 = new Intent(context, EstadoActivity.class);
        		generateNotification(context, "Servicio desasignado",in1);
        		break;
        		
        	case 1:
        		String numReserva2 = mensaje.getString("numReserva");
        		ServicioController.getInstance().descargarServicio(numReserva2);
        		Intent in2 = new Intent(context, EstadoActivity.class);
        		generateNotification(context, "Nuevo servicio asignado",in2);
        		break;
        		
        	case 2:
        		String sMessage = mensaje.getString("mensaje");
        		Util_TimeAndDate oMyData = new Util_TimeAndDate();
        		NotificacionesBean oNot = new NotificacionesBean(sMessage, oMyData.getCurrentDataTime(Util_TimeAndDate.FORMAT_DATE_GENERAL));
        		Toast.makeText(context, sMessage, Toast.LENGTH_LONG).show();
        		NotificacionesController.getInstance().storeMessage(oNot);
        		Intent in3 = new Intent(context, MensajeActivity.class);
        		generateNotification(context, "Tiene un nuevo mensaje",in3);
    
        		break;
        		
        	default:
        		Log.e(TAG,"Estado no identificado");
        	break;
        	}
 
        	System.out.println("------");
        	System.out.println("getIdServicio: "+ServicioWorkingSet.servicio.getIdServicio());
        	System.out.println("puntoActual: "+ServicioWorkingSet.puntoActual);
        	System.out.println("puntoFinal: "+ServicioWorkingSet.puntoFinal);
        	System.out.println("primerServicio: "+ServicioWorkingSet.primerServicio);
        	System.out.println("recibirServicios: "+ServicioWorkingSet.recibirServicios);
        	System.out.println("codigoUnidad: "+ServicioWorkingSet.codigoUnidad);
        	System.out.println("nombreConductor: "+ServicioWorkingSet.nombreConductor);
        	System.out.println("usuarioLogin: "+ServicioWorkingSet.usuarioLogin);
        	System.out.println("passwordLogin: "+ServicioWorkingSet.passwordLogin);
        	System.out.println("------");

        	
        } catch (Exception e) {
        	System.out.println("ERROR JSON PUSH");
        }
    }

	@Override
	protected void onRegistered(Context context, String arg1) {
		System.out.println("onRegistered");
	}

	@Override
	protected void onUnregistered(Context context, String arg1) {
		System.out.println("onUnregistered");
	}

    private static void generateNotification(Context context, String message, Intent in) {
    	
        int icon = R.drawable.ic_launcher;
        long when = System.currentTimeMillis();
        NotificationManager notificationManager = (NotificationManager)
                context.getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification(icon, message, when);
         
        String title = context.getString(R.string.app_name);


        //Start Activity
        Log.e("ENTRO", "Pero no carga");
        in.setAction(Intent.ACTION_MAIN);
        in.addCategory(Intent.CATEGORY_LAUNCHER);
        in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
   
        PendingIntent intent = PendingIntent.getActivity(context,0, in,PendingIntent.FLAG_ONE_SHOT);
     
        notification.setLatestEventInfo(context, title, message, intent);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        
         
        // Play default notification sound
        notification.defaults |= Notification.DEFAULT_SOUND;
         
        // Vibrate if vibrate is enabled
        notification.defaults |= Notification.DEFAULT_VIBRATE;
        notificationManager.notify(0, notification); 
        
    }


	
}
